// 第19节：管理:用户的创建、删除与修改
/* 
  安装好MongoDB时，它为我们默认开了一个最高管理权限方便我们管理数据库，我们可以用mongo链接数据库，就是这个原理。
  但在实际开发中并一般不能使用这个用户，因为大家都知道和最高权限的原因，安全性和可靠性都不适合，
  所以要对MongoDB的用户进行管理。这节课我们就学习一下MongoDB的用户管理。
*/


// 创建用户：
/* 
  首先要进入我们的admin库中，进入方法是直接使用use admin 就可以。进入后可以使用show collections来查看数据库中的集合。
  默认是只有一个集合的（system.version）。

  创建用户可以用db.createUser方法来完成，里边参数还是蛮多的，代码我写在下边，然后对每一项做出了解释。
*/
db.createUser({
  user:'wenfei',
  pwd:'123456',
  customData:{
    name:'大飞',
    email:'josnfei@qq.com',
    age:25,
  },
  roles:['read']
})
// 当然我们还可以单独配置一个数据库的权限，比如我们现在要配置compay数据库的权限为读写：
db.createUser({
  user:'wenfei',
  pwd:'123456',
  customData:{
    name:'大飞',
    email:'josnfei@qq.com',
    age:26,
  },
  roles:[
    {
      role:'readWrite',
      db:'demo19'
    },
    'read'
  ]
})


// 内置角色:
/* 
  数据库用户角色：read、readWrite；
  数据库管理角色：dbAdmin、dbOwner、userAdmin;
  集群管理角色：clusterAdmin、clusterManager、clusterMonitor、hostManage；
  备份恢复角色：backup、restore；
  所有数据库角色：readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
  超级用户角色：root
  内部角色：__system
*/


// 查找用户信息
/* 
  创建好后,查数据库用户信息
  db.system.users.find();

  {_id: "admin.wenfei", user: "wenfei", db: "admin", credentials: {…}, customData: {…}, …}
*/


// 删除用户：
/* 
  删除用户也是非常简单，直接用remove就可以删除这个用户的信息和权限。
  db.system.users.remove({user:'wenfei'})
*/


// 建权：
/* 
  有时候我们要验证用户的用户名密码是否正确，就需要用到MongoDB提供的健全操作。也算是一种登录操作，不过MongoDB把这叫做建权。
*/
db.auth('wenfei123','123456')
// 如果正确返回1，如果错误返回0。（Error：Authentication failed。）


// 启动建权
/* 
  重启MongoDB服务器，然后设置必须使用建权登录。
  mongod --auth
*/
/* 
  启动后，用户登录只能用用户名和密码进行登录，原来的mongo形式链接已经不起作用了。相应的用户权限也对应妥当。
  实际项目中我们启动服务器必须使用建权形式。
*/


// 登录
/* 
  如果在配置用户之后，用户想登录，可以使用mongo的形式，不过需要配置用户名密码：
*/
// mongo - u wenfei - p 123456 127.0.0.1: 27017/admin
// 这时候我们就可以用给我们的权限对数据库操作了。

